package be.hogent.iii.project.objects;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.NotSerializableException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.List;


public class Spel implements Serializable {

    private Veld speelveld;
    private List<Speler> deelnemers;
    private Speler aanbeurt;
    private int aantalSpelers;
    private static String SERIALISEERPAD = "C:\\School\\spel.dat";

    public Spel (List<Speler> deelnemers, Speler aanbeurt, Veld speelveld) {
        this.speelveld = speelveld;
        this.deelnemers = deelnemers;
        this.aanbeurt = aanbeurt;
        aantalSpelers = deelnemers.size();
    }

    public Speler getAanbeurt () {
        return aanbeurt;
    }
    
    public void volgendeAanbeurt(){
        aanbeurt = deelnemers.get((deelnemers.indexOf(aanbeurt)+1) % aantalSpelers);
    }

    public List getDeelnemers () {
        return deelnemers;
    }

    public void setDeelnemers (List<Speler> val) {
        this.deelnemers = val;
    }

    public Veld getSpeelveld () {
        return speelveld;
    }

    public void setSpeelveld (Veld val) {
        this.speelveld = val;
    }
    
    public void eindeBeurt(){
       //Connectie conn = new Connectie("127.0.0.1");
       //System.out.println(conn.stuurTekstBericht("einde beurt"));
       //conn.sluitConnectie();
        speelveld.eindeBeurt();
        this.volgendeAanbeurt();
        speelveld.beginBeurt(aanbeurt.getId());
    }
    
    /**
     * Zal het spel serialiseren naar een file, en het pad naar die file teruggeven.
     * 
     * @return De filenaam waar de geserialiseerde data staat.
     */
    public String serialiseer() {
        
        try {
            ObjectOutputStream outStream = new ObjectOutputStream(new FileOutputStream(SERIALISEERPAD));
            outStream.writeObject(this);
            outStream.close();
        } catch (NotSerializableException nte) {
            System.out.println("FOUT: Niet serialiseerbaar");
            nte.printStackTrace();
        } catch (IOException ioEx) {
            System.out.println("FOUT: Bij serialiseren van het spel");
            ioEx.printStackTrace();
        }
        
        return SERIALISEERPAD;
    }

}

